bitkeeper revision 1.1161 (420b5ed6DpcotfvpA5TTxShadFd_MQ)
authorsos22@douglas.cl.cam.ac.uk <sos22@douglas.cl.cam.ac.uk>
Thu, 10 Feb 2005 13:17:10 +0000 (13:17 +0000)
committersos22@douglas.cl.cam.ac.uk <sos22@douglas.cl.cam.ac.uk>
Thu, 10 Feb 2005 13:17:10 +0000 (13:17 +0000)
Merge with non-ancient version of Xen.

1  2 
.rootkeys
BitKeeper/etc/logging_ok
xen/Rules.mk
xen/common/domain.c
xen/common/keyhandler.c
xen/drivers/char/console.c
xen/drivers/char/serial.c

diff --cc .rootkeys
index 2bbb26776a7b9408c20683e874cbf4788c31c8c4,541eaae48932540bfd5fa96a5df3cf32301617c9..ab7a2c49ce3fa025402cc6f334c496163b0d9bf3
+++ b/.rootkeys
  3ddb79bc-Udq7ol-NX4q9XsYnN7A2Q xen/arch/x86/time.c
  3ddb79bccYVzXZJyVaxuv5T42Z1Fsw xen/arch/x86/trampoline.S
  3ddb79bcOftONV9h4QCxXOfiT0h91w xen/arch/x86/traps.c
+ 41c0c411tD3C7TpfDMiFTf7BaNd_Dg xen/arch/x86/vmx.c
+ 420951dcf1rSGnCH0AEYN2KjWGLG6A xen/arch/x86/vmx_intercept.c
+ 41c0c411ODt8uEmV-yUxpQLpqimE5Q xen/arch/x86/vmx_io.c
+ 41f97ef5139vN42cOYHfX_Ac8WOOjA xen/arch/x86/vmx_platform.c
+ 41c0c4128URE0dxcO15JME_MuKBPfg xen/arch/x86/vmx_vmcs.c
+ 419cbedeQDg8IrO3izo3o5rQNlo0kQ xen/arch/x86/x86_32/asm-offsets.c
+ 4202391dkvdTZ8GhWXe3Gqf9EOgWXg xen/arch/x86/x86_32/domain_build.c
  3e32af9aRnYGl4GMOaDKp7JdfhOGhg xen/arch/x86/x86_32/domain_page.c
- 40f92331jfOlE7MfKwpdkEb1CEf23g xen/arch/x86/x86_32/emulate.c
  3ddb79bcecupHj56ZbTa3B0FxDowMg xen/arch/x86/x86_32/entry.S
  3ddb79bcHwuCQDjBICDTSis52hWguw xen/arch/x86/x86_32/mm.c
+ 40f92331jfOlE7MfKwpdkEb1CEf23g xen/arch/x86/x86_32/seg_fixup.c
+ 42000d3ckiFc1qxa4AWqsd0t3lxuyw xen/arch/x86/x86_32/traps.c
  3ddb79bc4nTpGQOe6_-MbyZzkhlhFQ xen/arch/x86/x86_32/usercopy.c
 +4107c15e_NqNYew2EXroXz2mgTAMWQ xen/arch/x86/x86_32/xdb_trap.S
  3ddb79bcOMCu9-5mKpjIh5d0qqBDPg xen/arch/x86/x86_32/xen.lds
+ 41bf1717Ty3hwN3E9swdu8QfnvGqww xen/arch/x86/x86_64/asm-offsets.c
+ 4202391dA91ZovYX9d_5zJi9yGvLoQ xen/arch/x86/x86_64/domain_build.c
  40e96d3aLDI-nViMuYneD7VKYlZrVg xen/arch/x86/x86_64/entry.S
+ 41bf1717XhPz_dNT5OKSjgmbFuWBuA xen/arch/x86/x86_64/mm.c
+ 42000d3cMb8o1WuFBXC07c8i3lPZBw xen/arch/x86/x86_64/traps.c
  40e96d3ahBTZqbTViInnq0lM03vs7A xen/arch/x86/x86_64/usercopy.c
  40e96d3akN3Hu_J5Bk-WXD8OGscrYQ xen/arch/x86/x86_64/xen.lds
 +4107c15e-VmEcLsE-7JCXZaabI8C7A xen/arch/x86/xdb.c
  3ddb79bdff-gj-jFGKjOejeHLqL8Lg xen/common/Makefile
  3e397e66AyyD5fYraAySWuwi9uqSXg xen/common/ac_timer.c
- 4022a73c_BbDFd2YJ_NQYVvKX5Oz7w xen/common/debug-linux.c
- 3fa152581E5KhrAtqZef2Sr5NKTz4w xen/common/debug.c
  3ddb79bdLX_P6iB7ILiblRLWvebapg xen/common/dom0_ops.c
  3e6377e4i0c9GtKN65e99OtRbw3AZw xen/common/dom_mem_ops.c
  3ddb79bdYO5D8Av12NHqPeSviav7cg xen/common/domain.c
index dfa6c50277e7ce822a59960ae8321cea1ec56161,ccf69153cb37e1f1d1da1e58ba7c9f0a27de6dad..5a2b880b665af19e35ea59105c712816956cea66
@@@ -38,7 -60,7 +60,8 @@@ smh22@boulderdash.cl.cam.ac.u
  smh22@labyrinth.cl.cam.ac.uk
  smh22@tempest.cl.cam.ac.uk
  smh22@uridium.cl.cam.ac.uk
 +sos22@donkeykong.cl.cam.ac.uk
+ sos22@douglas.cl.cam.ac.uk
  sos22@labyrinth.cl.cam.ac.uk
  tlh20@elite.cl.cam.ac.uk
  tlh20@labyrinth.cl.cam.ac.uk
diff --cc xen/Rules.mk
index 25574c4f2b492058ab58d68e9dec1c299a859c94,186f4e3536939d11c9dffad5db6c0808c7323c29..300efbf5810253cdd8cb7339c44defdc52e5a16b
@@@ -47,9 -54,9 +54,9 @@@ els
  CFLAGS += -DVERBOSE
  endif
  
- ifeq ($(debugger),y)
- CFLAGS += -DXEN_DEBUGGER -g
 -#ifeq ($(debugger),y)
 -#CFLAGS += -DXEN_DEBUGGER
 -#endif
++ifeq ($(gdb_stub),y)
++CFLAGS += -g
 +endif
  
  ifeq ($(perfc),y)
  CFLAGS += -DPERF_COUNTERS
index 1e106f2c60b85f21d3b7245e6e8e12f6286a7049,2199ca98b721eb35089bb576312b5d1ba6331d98..394e9804be5912a88fa3b12029a175cf3b80c00d
@@@ -164,22 -161,18 +161,22 @@@ void domain_crash(void
      BUG();
  }
  
 +extern void trap_to_xendbg(void);
 +
  void domain_shutdown(u8 reason)
  {
-     struct domain *d;
+     struct domain *d = current->domain;
  
-     if ( current->domain == 0 )
+     if ( d->id == 0 )
      {
          extern void machine_restart(char *);
          extern void machine_halt(void);
  
 +      trap_to_xendbg();
 +
          if ( reason == 0 ) 
          {
-             printk("Domain 0 halted: Our work here is done.\n");
+             printk("Domain 0 halted: halting machine.\n");
              machine_halt();
          }
          else
index 8f50f6f7803e32dac198c2f215666d575510c782,789b2d3c6aca4114d94f57299418e730007f6d66..5b5cd662ef3e70805a5eed1257692bdbe5c58cba
@@@ -70,72 -107,73 +107,83 @@@ static void do_task_queues(unsigned cha
  
      for_each_domain ( d )
      {
-         printk("Xen: DOM %u, CPU %d [has=%c] refcnt=%d nr_pages=%d "
-                "xenheap_pages=%d\n",
-                d->domain, d->processor, 
-                test_bit(DF_RUNNING, &d->flags) ? 'T':'F',
+         printk("Xen: DOM %u, flags=%lx refcnt=%d nr_pages=%d "
+                "xenheap_pages=%d\n", d->id, d->d_flags,
                 atomic_read(&d->refcnt), d->tot_pages, d->xenheap_pages);
  
-         if ( d->tot_pages < 10 )
-         {
-             list_for_each ( ent, &d->page_list )
-             {
-                 page = list_entry(ent, struct pfn_info, list);
-                 printk("Page %08x: caf=%08x, taf=%08x\n",
-                        page_to_phys(page), page->u.inuse.count_info,
-                        page->u.inuse.type_info);
-             }
-         }
-         page = virt_to_page(d->shared_info);
-         printk("Shared_info@%08x: caf=%08x, taf=%08x\n",
-                page_to_phys(page), page->u.inuse.count_info,
-                page->u.inuse.type_info);
+         dump_pageframe_info(d);
                 
-         printk("Guest: upcall_pend = %02x, upcall_mask = %02x\n", 
-                d->shared_info->vcpu_data[0].evtchn_upcall_pending, 
-                d->shared_info->vcpu_data[0].evtchn_upcall_mask);
-         printk("Notifying guest...\n"); 
-         send_guest_virq(d, VIRQ_DEBUG);
+         for_each_exec_domain ( d, ed ) {
+             printk("Guest: %p CPU %d [has=%c] flags=%lx "
+                    "upcall_pend = %02x, upcall_mask = %02x\n", ed,
+                    ed->processor,
+                    test_bit(EDF_RUNNING, &ed->ed_flags) ? 'T':'F',
+                    ed->ed_flags,
+                    ed->vcpu_info->evtchn_upcall_pending, 
+                    ed->vcpu_info->evtchn_upcall_mask);
+             printk("Notifying guest... %d/%d\n", d->id, ed->eid); 
+             printk("port %d/%d stat %d %d %d\n",
+                    VIRQ_DEBUG, ed->virq_to_evtchn[VIRQ_DEBUG],
+                    test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_pending[0]),
+                    test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_mask[0]),
+                    test_bit(ed->virq_to_evtchn[VIRQ_DEBUG]>>5, &ed->vcpu_info->evtchn_pending_sel));
+             send_guest_virq(ed, VIRQ_DEBUG);
+         }
      }
  
-     read_unlock_irqrestore(&tasklist_lock, flags); 
+     read_unlock(&domlist_lock);
  }
  
- extern void dump_runq(unsigned char key, void *dev_id, 
-                       struct pt_regs *regs);
- extern void print_sched_histo(unsigned char key, void *dev_id, 
-                               struct pt_regs *regs);
- extern void reset_sched_histo(unsigned char key, void *dev_id, 
-                               struct pt_regs *regs);
+ extern void dump_runq(unsigned char key);
+ extern void print_sched_histo(unsigned char key);
+ extern void reset_sched_histo(unsigned char key);
+ #ifndef NDEBUG
+ extern void audit_domains_key(unsigned char key);
+ #endif
  #ifdef PERF_COUNTERS
- extern void perfc_printall(unsigned char key, void *dev_id,
-                            struct pt_regs *regs);
- extern void perfc_reset(unsigned char key, void *dev_id,
-                         struct pt_regs *regs);
+ extern void perfc_printall(unsigned char key);
+ extern void perfc_reset(unsigned char key);
  #endif
  
 +void do_debug_key(unsigned char key, void *dev_id, struct pt_regs *regs)
 +{
 +    extern void trap_to_xendbg(void);
 +    trap_to_xendbg();
 +    asm volatile ("nop"); /* Prevent the compiler doing tail call
 +                           optimisation, as that confuses xendbg a
 +                           bit. */
 +}
 +
  void initialize_keytable(void)
  {
-     add_key_handler('d', dump_registers, "dump registers"); 
-     add_key_handler('h', show_handlers, "show this message");
-     add_key_handler('l', print_sched_histo, "print sched latency histogram");
-     add_key_handler('L', reset_sched_histo, "reset sched latency histogram");
-     add_key_handler('q', do_task_queues, "dump task queues + guest state");
-     add_key_handler('r', dump_runq,      "dump run queues");
-     add_key_handler('R', halt_machine,   "reboot machine"); 
+     open_softirq(KEYPRESS_SOFTIRQ, keypress_softirq);
+     register_irq_keyhandler(
+         'd', dump_registers, "dump registers"); 
+     register_keyhandler(
+         'h', show_handlers, "show this message");
+     register_keyhandler(
+         'l', print_sched_histo, "print sched latency histogram");
+     register_keyhandler(
+         'L', reset_sched_histo, "reset sched latency histogram");
+     register_keyhandler(
+         'q', do_task_queues, "dump task queues + guest state");
+     register_keyhandler(
+         'r', dump_runq,      "dump run queues");
+     register_irq_keyhandler(
+         'R', halt_machine,   "reboot machine"); 
+ #ifndef NDEBUG
+     register_keyhandler(
+         'o', audit_domains_key,  "audit domains >0 EXPERIMENTAL"); 
+ #endif
  #ifdef PERF_COUNTERS
-     add_key_handler('p', perfc_printall, "print performance counters"); 
-     add_key_handler('P', perfc_reset,    "reset performance counters"); 
+     register_keyhandler(
+         'p', perfc_printall, "print performance counters"); 
+     register_keyhandler(
+         'P', perfc_reset,    "reset performance counters"); 
  #endif
 +    add_key_handler('%', do_debug_key,   "Trap to xendbg");
  }
Simple merge
index 91ae9d30b02a8b3d3e73c037531f2b77766b4061,9ccad0ff4ae8ee1c2f3ed8c9acee8e99a4ce176d..29cfb61fd8c7a42fb961760e13608901e44a47ac
@@@ -425,7 -436,6 +436,7 @@@ unsigned char irq_serial_getc(int handl
      uart_t *uart = &com[handle & SERHND_IDX];
      unsigned char c;
  
-     /* disable_irq() may have raced execution of uart_rx(). */
++
      while ( uart->rxbufp != uart->rxbufc )
      {
          c = uart->rxbuf[MASK_RXBUF_IDX(uart->rxbufc++)];